package com.lzy.business.facade;

import com.github.pagehelper.PageInfo;
import com.lzy.base.apis.DeptServiceApi;
import com.lzy.base.dtos.DeptDto;
import com.lzy.framework.core.ensure.Ensure;
import com.lzy.framework.core.orm.db.Pager;
import com.lzy.product.apis.ProductClassifyDeptServiceApi;
import com.lzy.product.apis.ProductClassifyServiceApi;
import com.lzy.product.apis.ProductInfoClassifyServiceApi;
import com.lzy.product.apis.ProductInfoServiceApi;
import com.lzy.product.dtos.ProductClassifyDeptDto;
import com.lzy.product.dtos.ProductClassifyDto;
import com.lzy.product.dtos.ProductInfoClassifyDto;
import com.lzy.product.dtos.ProductInfoDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by WIN7 on 2017/11/30.
 */
@Component
public class ProductClassifyFacade {

    @Autowired
    ProductClassifyServiceApi productClassifyServiceApi;

    @Autowired
    ProductInfoClassifyServiceApi productInfoClassifyServiceApi;

    @Autowired
    ProductInfoServiceApi productInfoServiceApi;

    @Autowired
    ProductClassifyDeptServiceApi productClassifyDeptServiceApi;

    @Autowired
    DeptServiceApi deptServiceApi;

    /**
     * 获取产品分类列表
     *
     * @param pager
     * @param dto
     * @return
     */
    public PageInfo<ProductClassifyDto> getClassifyList(Pager pager, ProductClassifyDto dto) {
        Ensure.that(pager).isNotNull("01000003");
        //查询出分类的列表
        PageInfo<ProductClassifyDto> pageInfo = productClassifyServiceApi.selectList(pager, dto);
        if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) {
            List<ProductClassifyDto> classifyDtoList = pageInfo.getList();
            //根据每一个分类id查找出该分类下所有的产品id
            for (ProductClassifyDto pcd : classifyDtoList) {
                Ensure.that(pcd.getId()).isNotNull("01000003");
                ProductInfoClassifyDto picd = new ProductInfoClassifyDto();
                picd.setClassifyId(pcd.getId());
                //查找出所有的产品id,并根据所有的产品名称
                List<ProductInfoClassifyDto> picList = productInfoClassifyServiceApi.selectList(picd);
                if (picList != null && picList.size() > 0) {
                    String nameList = "";
                    for (ProductInfoClassifyDto picDto : picList) {
                        Ensure.that(picDto.getInfoId()).isNotNull("01000003");
                        ProductInfoDto piDto = productInfoServiceApi.findById(picDto.getInfoId());
                        Ensure.that(piDto).isNotNull("01000003");
                        Ensure.that(piDto.getName()).isNotNull("01000003");
                        nameList = nameList + piDto.getName() + "、";
                    }
                    pcd.setNameList(nameList.substring(0, nameList.length() - 1));
                }
            }
        }
        return pageInfo;
    }

    /**
     * 新增产品分类
     *
     * @param dto
     * @return
     */
    public Boolean addClassify(ProductClassifyDto dto) {
        Ensure.that(dto).isNotNull("01000003");
        Long id = productClassifyServiceApi.insert(dto);
        Ensure.that(id).isNotNull("01000003");
        Integer n = 0;
        if (dto.getIdList() != null && dto.getIdList().length > 0) {
            Long[] idList = dto.getIdList();
            for (Long deptId : idList) {
                if (deptId != null) {
                    ProductClassifyDeptDto pcdDto = new ProductClassifyDeptDto();
                    pcdDto.setClassifyId(id);
                    pcdDto.setDeptId(deptId);
                    Long k = productClassifyDeptServiceApi.insert(pcdDto);
                    Ensure.that(k.equals(1L)).isTrue("02000003");
                    n++;
                }
            }
        }
        if (id != null && n.equals(dto.getIdList().length)) {
            return true;
        }
        return false;
    }

    public ProductClassifyDto getById(Long id){
        ProductClassifyDto classifyDto = productClassifyServiceApi.findById(id);
        if(classifyDto != null) {
            if (!classifyDto.getStartTime().equals("")  && !classifyDto.getEndTime().equals("")) {
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
                //获取当前时间
                String nowStr = dateFormat.format(new Date());
                //第一个时间与第二个时间的关系：大于-1;等于-2;小于-3
                Integer m = productClassifyServiceApi.compareDate(String.valueOf(classifyDto.getStartTime()), nowStr);
                Integer n = productClassifyServiceApi.compareDate(String.valueOf(classifyDto.getEndTime()), nowStr);
                //未开始
                if (m == 1) {
                    classifyDto.setMark(1);
                } else if (n == 3) {
                    //已结束
                    classifyDto.setMark(3);
                } else {
                    //进行中
                    classifyDto.setMark(2);
                }
            }
        }
        return classifyDto;
    }

    /**
     * 更新产品分类
     *
     * @param dto
     * @return
     */
    public Boolean updateClassify(ProductClassifyDto dto) {
        Ensure.that(dto).isNotNull("01000003");
        Boolean b = productClassifyServiceApi.update(dto);
        Ensure.that(b).isTrue("01000003");
        //将部门和分类关系，先删除，在添加
        Integer i = 0;
        ProductClassifyDeptDto productClassifyDeptDto = new ProductClassifyDeptDto();
        productClassifyDeptDto.setClassifyId(dto.getId());
        productClassifyDeptServiceApi.delByKey(productClassifyDeptDto);
        if (dto.getIdList() != null && dto.getIdList().length > 0) {
            Long[] idList = dto.getIdList();
            ProductClassifyDeptDto dto1 = new ProductClassifyDeptDto();
            dto1.setClassifyId(dto.getId());
            for (Long deptId : idList) {
                dto1.setDeptId(deptId);
                Long n = productClassifyDeptServiceApi.insert(dto1);
                if (n > 0) {
                    i++;
                }
            }
            Ensure.that(i.equals(idList.length)).isTrue("");
        }
        return true;
    }

    /**
     * 查看单个产品分类信息
     */
    public ProductClassifyDto selectById(Long id) {
        Ensure.that(id).isNotNull("01000003");
        ProductClassifyDto pcDto = productClassifyServiceApi.findById(id);
        if (pcDto != null && pcDto.getId() != null) {
            ProductClassifyDeptDto pcdDto = new ProductClassifyDeptDto();
            pcdDto.setClassifyId(pcDto.getId());
            List<ProductClassifyDeptDto> productClassifyDeptDtoList = productClassifyDeptServiceApi.selectProductClassifyDept(pcdDto);
            if (productClassifyDeptDtoList != null && productClassifyDeptDtoList.size() > 0) {
                String deptString = "";
                for (ProductClassifyDeptDto dto : productClassifyDeptDtoList) {
                    if (dto != null && dto.getDeptId() != null) {
                        DeptDto deptDto = deptServiceApi.findDeptDtoById(dto.getDeptId());
                        Ensure.that(deptDto).isNotNull("03000001");
                        Ensure.that(deptDto.getDeptName()).isNotNull("03000001");
                        deptString = deptString + deptDto.getDeptName() + "/";
                    }
                }
                pcDto.setDeptString(deptString.substring(0, deptString.length() - 1));
            }
        }
        return pcDto;
    }

    /**
     * 批量移除
     */
    public Boolean removeList(Long[] idList) {
        String ids = "";
        Integer n = 0;
        for (Long id : idList) {
            ids = ids + id + ",";
            n++;
        }
        ids = ids.substring(0, ids.length() - 1);
        Integer m = productClassifyServiceApi.removeList(ids);
        Ensure.that(m.equals(n)).isTrue("02000009");
        return true;
    }


}
